home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / retinarave / include / pfastreplay.i < prev    next >
Text File  |  1980-01-03  |  19KB  |  1,077 lines

  1. *****************************************
  2. * Pro-Packer v1.0 Replay-Routine.    *
  3. * Based upon the PT1.1B-Replayer    *
  4. * by Lars 'ZAP' Hamre/Amiga Freelancers.*
  5. * Modified by Estrup/Static Bytes.    *
  6. * NB! This replayer uses Lev6-Interrupt.*
  7. *****************************************
  8.  
  9. mt_init    LEA    mt_data,A0
  10.     MOVE.L    A0,mt_SongDataPtr
  11.     LEA    250(A0),A1
  12.     MOVE.W    #511,D0
  13.     MOVEQ    #0,D1
  14. mtloop    MOVE.L    D1,D2
  15.     SUBQ.W    #1,D0
  16. mtloop2    MOVE.B    (A1)+,D1
  17.     CMP.W    D2,D1
  18.     BGT.S    mtloop
  19.     DBRA    D0,mtloop2
  20.     ADDQ    #1,D2
  21.             
  22.     LEA    mt_SampleStarts(PC),A1
  23.     MULU    #256,D2
  24.     ADD.L    #762,D2
  25.     ADD.L    A0,D2
  26.     MOVE.L    D2,A2
  27.     MOVEQ    #30,D0
  28. mtloop3    CLR.L    (A2)
  29.     MOVE.L    A2,(A1)+
  30.     MOVEQ    #0,D1
  31.     MOVE.W    (A0),D1
  32.     ADD.L    D1,D1
  33.     ADD.L    D1,A2
  34.     LEA    8(A0),A0
  35.     DBRA    D0,mtloop3
  36.  
  37.     OR.B    #2,$BFE001
  38.     MOVE.B    #6,mt_speed
  39.     CLR.B    mt_counter
  40.     CLR.B    mt_SongPos
  41.     CLR.W    mt_PatternPos
  42. mt_end    LEA    $DFF096,A0
  43.     CLR.W    $12(A0)
  44.     CLR.W    $22(A0)
  45.     CLR.W    $32(A0)
  46.     CLR.W    $42(A0)
  47.     MOVE.W    #$F,(A0)
  48.     RTS
  49.  
  50. mt_music
  51.     MOVEM.L    D0-D4/A0-A6,-(SP)
  52.     ADDQ.B    #1,mt_counter
  53.     MOVE.B    mt_counter(PC),D0
  54.     CMP.B    mt_speed(PC),D0
  55.     BLO.S    mt_NoNewNote
  56.     CLR.B    mt_counter
  57.     TST.B    mt_PattDelTime2
  58.     BEQ.S    mt_GetNewNote
  59.     BSR.S    mt_NoNewAllChannels
  60.     BRA.W    mt_dskip
  61.  
  62. mt_NoNewNote
  63.     BSR.S    mt_NoNewAllChannels
  64.     BRA.W    mt_NoNewPosYet
  65.  
  66. mt_NoNewAllChannels
  67.     LEA    $DFF090,A5
  68.     LEA    mt_chan1temp-44(PC),A6
  69.     BSR.W    mt_CheckEfx
  70.     BSR.W    mt_CheckEfx
  71.     BSR.W    mt_CheckEfx
  72.     BRA.W    mt_CheckEfx
  73.  
  74. mt_GetNewNote
  75.     MOVE.L    mt_SongDataPtr(PC),A0
  76.     LEA    (A0),A3
  77.     LEA    122(A0),A2    ;pattpo
  78.     LEA    762(A0),A0    ;patterndata
  79.     CLR.W    mt_DMACONtemp
  80.  
  81.     LEA    $DFF090,A5
  82.     LEA    mt_chan1temp-44(PC),A6
  83.     BSR.S    mt_DoVoice
  84.     BSR.S    mt_DoVoice
  85.     BSR.B    mt_DoVoice
  86.     BSR.B    mt_DoVoice
  87.     BRA.W    mt_SetDMA
  88.  
  89. mt_DoVoice
  90.     MOVEQ    #0,D0
  91.     MOVEQ    #0,D1
  92.     MOVE.B    mt_SongPos(PC),D0
  93.     LEA    128(A2),A2
  94.     MOVE.B    (A2,D0.W),D1
  95.     ASL    #8,D1
  96.     ADD.W    mt_PatternPos(PC),D1
  97.     LEA    $10(A5),A5
  98.     LEA    44(A6),A6
  99.  
  100.     TST.L    (A6)
  101.     BNE.S    mt_plvskip
  102.     BSR.W    mt_PerNop
  103. mt_plvskip
  104.     MOVE.L    (A0,D1.W),(A6)
  105.     MOVE.B    2(A6),D2
  106.     AND.L    #$F0,D2
  107.     LSR.B    #4,D2
  108.     MOVE.B    (A6),D0
  109.     AND.B    #$F0,D0
  110.     OR.B    D0,D2
  111.     BEQ.B    mt_SetRegs
  112.     MOVEQ    #0,D3
  113.     LEA    mt_SampleStarts(PC),A1
  114.     SUBQ    #1,D2
  115.     MOVE    D2,D4
  116.     ADD    D2,D2
  117.     ADD    D2,D2
  118.     ASL    #3,D4
  119.     MOVE.L    (A1,D2.L),4(A6)
  120.     MOVE.W    (A3,D4.W),8(A6)
  121.     MOVE.W    (A3,D4.W),40(A6)
  122.     MOVE.W    2(A3,D4.W),18(A6)
  123.     MOVE.L    4(A6),D2    ; Get start
  124.     MOVE.W    4(A3,D4.L),D3    ; Get repeat
  125.     BEQ.S    mt_NoLoop
  126.     MOVE.W    D3,D0        ; Get repeat
  127.     ADD.W    D3,D3
  128.     ADD.L    D3,D2        ; Add repeat
  129.     ADD.W    6(A3,D4.L),D0    ; Add replen
  130.     MOVE.W    D0,8(A6)
  131.  
  132. mt_NoLoop
  133.     MOVE.L    D2,10(A6)
  134.     MOVE.L    D2,36(A6)
  135.     MOVE.W    6(A3,D4.L),14(A6)    ; Save replen
  136.     MOVE.B    19(A6),9(A5)    ; Set volume
  137. mt_SetRegs
  138.     MOVE.W    (A6),D0
  139.     AND.W    #$0FFF,D0
  140.     BEQ.W    mt_CheckMoreEfx    ; If no note
  141.     MOVE.W    2(A6),D0
  142.     AND.W    #$0FF0,D0
  143.     CMP.W    #$0E50,D0
  144.     BEQ.S    mt_DoSetFineTune
  145.     MOVE.B    2(A6),D0
  146.     AND.B    #$0F,D0
  147.     CMP.B    #3,D0    ; TonePortamento
  148.     BEQ.S    mt_ChkTonePorta
  149.     CMP.B    #5,D0
  150.     BEQ.S    mt_ChkTonePorta
  151.     CMP.B    #9,D0    ; Sample Offset
  152.     BNE.S    mt_SetPeriod
  153.     BSR.W    mt_CheckMoreEfx
  154.     BRA.S    mt_SetPeriod
  155.  
  156. mt_ChkTonePorta
  157.     BSR.W    mt_SetTonePorta
  158.     BRA.W    mt_CheckMoreEfx
  159.  
  160. mt_DoSetFineTune
  161.     BSR.W    mt_SetFineTune
  162.  
  163. mt_SetPeriod
  164.     MOVEM.L    D1/A1,-(SP)
  165.     MOVE.W    (A6),D1
  166.     AND.W    #$0FFF,D1
  167.     LEA    mt_PeriodTable(PC),A1
  168.     MOVEQ    #36,D7
  169. mt_ftuloop
  170.     CMP.W    (A1)+,D1
  171.     BHS.S    mt_ftufound
  172.     DBRA    D7,mt_ftuloop
  173. mt_ftufound
  174.     MOVEQ    #0,D1
  175.     MOVE.B    18(A6),D1
  176.     ASL    #3,D1
  177.     MOVE    D1,D0
  178.     ASL    #3,D1
  179.     ADD    D0,D1
  180.     MOVE.W    -2(A1,D1.W),16(A6)
  181.     MOVEM.L    (SP)+,D1/A1
  182.  
  183.     MOVE.W    2(A6),D0
  184.     AND.W    #$0FF0,D0
  185.     CMP.W    #$0ED0,D0 ; Notedelay
  186.     BEQ.W    mt_CheckMoreEfx
  187.  
  188.     MOVE.W    20(A6),$DFF096
  189.     BTST    #2,30(A6)
  190.     BNE.S    mt_vibnoc
  191.     CLR.B    27(A6)
  192. mt_vibnoc
  193.     BTST    #6,30(A6)
  194.     BNE.S    mt_trenoc
  195.     CLR.B    29(A6)
  196. mt_trenoc
  197.     MOVE.L    4(A6),(A5)    ; Set start
  198.     MOVE.W    8(A6),4(A5)    ; Set length
  199.     MOVE.W    16(A6),6(A5)    ; Set period
  200.     MOVE.W    20(A6),D0
  201.     OR.W    D0,mt_DMACONtemp
  202.     BRA.W    mt_CheckMoreEfx
  203.  
  204. mt_SetDMA
  205.     lea    $bfd000,a3
  206.     move.b    #$7f,$d00(a3)
  207.     move.w    #$2000,$dff09c
  208.     move.w    #$a000,$dff09a
  209.     move.l    $78.w,mt_oldirq
  210.     move.l    #mt_irq1,$78.w
  211.     moveq    #0,d0
  212.     move.b    d0,$e00(a3)
  213.     move.b    #$a8,$400(a3)
  214.     move.b    d0,$500(a3)
  215.     move.b    #$11,$e00(a3)
  216.     move.b    #$81,$d00(a3)
  217.     OR.W    #$8000,mt_DMACONtemp
  218.     bra.w    mt_dskip
  219.  
  220. mt_irq1:tst.b    $bfdd00
  221.     MOVE.W    mt_dmacontemp(pc),$DFF096
  222.     move.w    #$2000,$dff09c
  223.     move.l    #mt_irq2,$78.w
  224.     rte
  225.  
  226. mt_irq2:tst.b    $bfdd00
  227.     movem.l    a5-a6,-(a7)
  228.     LEA    $DFF0A0,A5
  229.     LEA    mt_chan1temp(PC),A6
  230.     MOVE.L    10(A6),(A5)
  231.     MOVE.W    14(A6),4(A5)
  232.     MOVE.L    54(A6),$10(A5)
  233.     MOVE.W    58(A6),$14(A5)
  234.     MOVE.L    98(A6),$20(A5)
  235.     MOVE.W    102(A6),$24(A5)
  236.     MOVE.L    142(A6),$30(A5)
  237.     MOVE.W    146(A6),$34(A5)
  238.     move.b    #0,$bfde00
  239.     move.b    #$7f,$bfdd00
  240.     move.l    mt_oldirq(pc),$78.w
  241.     move.w    #$2000,$dff09c
  242.     movem.l    (a7)+,a5-a6
  243.     rte
  244.  
  245. mt_dskip
  246.     LEA    mt_PattDelTime(PC),A4
  247.     ADDQ.W    #4,3(A4)
  248.     MOVE.B    (A4),D0
  249.     BEQ.S    mt_dskc
  250.     MOVE.B    D0,(A4)
  251.     CLR.B    (A4)
  252. mt_dskc    TST.B    1(A4)
  253.     BEQ.S    mt_dska
  254.     SUBQ.B    #1,1(A4)
  255.     BEQ.S    mt_dska
  256.     SUBQ.W    #4,3(A4)
  257. mt_dska    TST.B    mt_PBreakFlag
  258.     BEQ.S    mt_nnpysk
  259.     SF    mt_PBreakFlag
  260.     MOVEQ    #0,D0
  261.     MOVE.B    mt_PBreakPos(PC),D0
  262.     CLR.B    mt_PBreakPos
  263.     LSL    #2,D0
  264.     MOVE.W    D0,3(A4)
  265. mt_nnpysk
  266.     CMP.W    #256,3(A4)
  267.     BLO.S    mt_NoNewPosYet
  268. mt_NextPosition    
  269.     MOVEQ    #0,D0
  270.     MOVE.B    mt_PBreakPos(PC),D0
  271.     LSL    #2,D0
  272.     MOVE.W    D0,3(A4)
  273.     CLR.B    mt_PBreakPos
  274.     CLR.B    mt_PosJumpFlag
  275.     ADDQ.B    #1,mt_SongPos
  276.     AND.B    #$7F,mt_SongPos
  277.     MOVE.B    mt_SongPos(PC),D1
  278.     MOVE.L    mt_SongDataPtr(PC),A0
  279.     CMP.B    248(A0),D1
  280.     BLO.S    mt_NoNewPosYet
  281.     CLR.B    mt_SongPos
  282. mt_NoNewPosYet    
  283.     TST.B    mt_PosJumpFlag
  284.     BNE.S    mt_NextPosition
  285.     MOVEM.L    (SP)+,D0-D4/A0-A6
  286.     RTS
  287.  
  288. mt_CheckEfx
  289.     LEA    $10(A5),A5
  290.     LEA    44(A6),A6
  291.     BSR.W    mt_UpdateFunk
  292.     MOVE.W    2(A6),D0
  293.     AND.W    #$0FFF,D0
  294.     BEQ.S    mt_PerNop
  295.     MOVE.B    2(A6),D0
  296.     AND.W    #$0F,D0
  297.     BEQ.S    mt_Arpeggio
  298.     SUBQ    #1,D0
  299.     BEQ.W    mt_PortaUp
  300.     SUBQ    #1,D0
  301.     BEQ.W    mt_PortaDown
  302.     SUBQ    #1,D0
  303.     BEQ.W    mt_TonePortamento
  304.     SUBQ    #1,D0
  305.     BEQ.W    mt_Vibrato
  306.     SUBQ    #1,D0
  307.     BEQ.W    mt_TonePlusVolSlide
  308.     SUBQ    #1,D0
  309.     BEQ.W    mt_VibratoPlusVolSlide
  310.     SUBQ    #8,D0
  311.     BEQ.W    mt_E_Commands
  312. SetBack    MOVE.W    16(A6),6(A5)
  313.     ADDQ    #7,D0
  314.     BEQ.W    mt_Tremolo
  315.     SUBQ    #3,D0
  316.     BEQ.W    mt_VolumeSlide
  317. mt_Return2
  318.     RTS
  319.  
  320. mt_PerNop
  321.     MOVE.W    16(A6),6(A5)
  322.     RTS
  323.  
  324. mt_Arpeggio
  325.     MOVEQ    #0,D0
  326.     MOVE.B    mt_counter(PC),D0
  327.     DIVS    #3,D0
  328.     SWAP    D0
  329.     TST.W    D0
  330.     BEQ.S    mt_Arpeggio2
  331.     SUBQ    #2,D0
  332.     BEQ.S    mt_Arpeggio1
  333.     MOVEQ    #0,D0
  334.     MOVE.B    3(A6),D0
  335.     LSR.B    #4,D0
  336.     BRA.S    mt_Arpeggio3
  337.  
  338. mt_Arpeggio2
  339.     MOVE.W    16(A6),6(A5)
  340.     RTS
  341.  
  342. mt_Arpeggio1
  343.     MOVE.B    3(A6),D0
  344.     AND.W    #15,D0
  345. mt_Arpeggio3
  346.     ADD.W    D0,D0
  347.     MOVEQ    #0,D1
  348.     MOVE.B    18(A6),D1
  349.     ASL    #3,D1
  350.     MOVE    D1,D2
  351.     ASL    #3,D1
  352.     ADD    D2,D1
  353.     LEA    mt_PeriodTable(PC),A0
  354.     ADD.L    D1,A0
  355.     MOVE.W    16(A6),D1
  356.     MOVEQ    #36,D7
  357. mt_arploop
  358.     CMP.W    (A0)+,D1
  359.     BHS.S    mt_Arpeggio4
  360.     DBRA    D7,mt_arploop
  361.     RTS
  362.  
  363. mt_Arpeggio4
  364.     MOVE.W    -2(A0,D0.W),6(A5)
  365.     RTS
  366.  
  367. mt_FinePortaUp
  368.     TST.B    mt_counter
  369.     BNE.S    mt_Return2
  370.     MOVE.B    #$0F,mt_LowMask
  371. mt_PortaUp
  372.     MOVEQ    #0,D0
  373.     MOVE.B    3(A6),D0
  374.     AND.B    mt_LowMask(PC),D0
  375.     MOVE.B    #$FF,mt_LowMask
  376.     SUB.W    D0,16(A6)
  377.     MOVE.W    16(A6),D0
  378.     AND.W    #$0FFF,D0
  379.     CMP.W    #113,D0
  380.     BPL.S    mt_PortaUskip
  381.     AND.W    #$F000,16(A6)
  382.     OR.W    #113,16(A6)
  383. mt_PortaUskip
  384.     MOVE.W    16(A6),D0
  385.     AND.W    #$0FFF,D0
  386.     MOVE.W    D0,6(A5)
  387.     RTS    
  388.  
  389. mt_FinePortaDown
  390.     TST.B    mt_counter
  391.     BNE.W    mt_Return2
  392.     MOVE.B    #$0F,mt_LowMask
  393. mt_PortaDown
  394.     CLR.W    D0
  395.     MOVE.B    3(A6),D0
  396.     AND.B    mt_LowMask(PC),D0
  397.     MOVE.B    #$FF,mt_LowMask
  398.     ADD.W    D0,16(A6)
  399.     MOVE.W    16(A6),D0
  400.     AND.W    #$0FFF,D0
  401.     CMP.W    #856,D0
  402.     BMI.S    mt_PortaDskip
  403.     AND.W    #$F000,16(A6)
  404.     OR.W    #856,16(A6)
  405. mt_PortaDskip
  406.     MOVE.W    16(A6),D0
  407.     AND.W    #$0FFF,D0
  408.     MOVE.W    D0,6(A5)
  409.     RTS
  410.  
  411. mt_SetTonePorta
  412.     MOVEM.L    A0,-(SP)
  413.     MOVE.W    (A6),D2
  414.     AND.W    #$0FFF,D2
  415.     MOVEQ    #0,D0
  416.     MOVE.B    18(A6),D0
  417.     ADD    D0,D0
  418.     MOVE    D0,D7
  419.     ADD    D0,D0
  420.     ADD    D0,D0
  421.     ADD    D0,D7
  422.     ASL    #3,D0
  423.     ADD    D7,D0
  424.     LEA    mt_PeriodTable(PC),A0
  425.     ADD.L    D0,A0
  426.     MOVEQ    #0,D0
  427. mt_StpLoop
  428.     CMP.W    (A0,D0.W),D2
  429.     BHS.S    mt_StpFound
  430.     ADDQ    #2,D0
  431.     CMP.W    #37*2,D0
  432.     BLO.S    mt_StpLoop
  433.     MOVEQ    #35*2,D0
  434. mt_StpFound
  435.     BTST    #3,18(A6)
  436.     BEQ.S    mt_StpGoss
  437.     TST.W    D0
  438.     BEQ.S    mt_StpGoss
  439.     SUBQ    #2,D0
  440. mt_StpGoss
  441.     MOVE.W    (A0,D0.W),D2
  442.     MOVE.L    (SP)+,A0
  443.     MOVE.W    D2,24(A6)
  444.     MOVE.W    16(A6),D0
  445.     CLR.B    22(A6)
  446.     CMP.W    D0,D2
  447.     BEQ.S    mt_ClearTonePorta
  448.     BGE.W    mt_Return2
  449.     MOVE.B    #1,22(A6)
  450.     RTS
  451.  
  452. mt_ClearTonePorta
  453.     CLR.W    24(A6)
  454.     RTS
  455.  
  456. mt_TonePortamento
  457.     MOVE.B    3(A6),D0
  458.     BEQ.S    mt_TonePortNoChange
  459.     MOVE.B    D0,23(A6)
  460.     CLR.B    3(A6)
  461. mt_TonePortNoChange
  462.     TST.W    24(A6)
  463.     BEQ.W    mt_Return2
  464.     MOVEQ    #0,D0
  465.     MOVE.B    23(A6),D0
  466.     TST.B    22(A6)
  467.     BNE.S    mt_TonePortaUp
  468. mt_TonePortaDown
  469.     ADD.W    D0,16(A6)
  470.     MOVE.W    24(A6),D0
  471.     CMP.W    16(A6),D0
  472.     BGT.S    mt_TonePortaSetPer
  473.     MOVE.W    24(A6),16(A6)
  474.     CLR.W    24(A6)
  475.     BRA.S    mt_TonePortaSetPer
  476.  
  477. mt_TonePortaUp
  478.     SUB.W    D0,16(A6)
  479.     MOVE.W    24(A6),D0
  480.     CMP.W    16(A6),D0
  481.     BLT.S    mt_TonePortaSetPer
  482.     MOVE.W    24(A6),16(A6)
  483.     CLR.W    24(A6)
  484.  
  485. mt_TonePortaSetPer
  486.     MOVE.W    16(A6),D2
  487.     MOVE.B    31(A6),D0
  488.     AND.B    #$0F,D0
  489.     BEQ.S    mt_GlissSkip
  490.     MOVEQ    #0,D0
  491.     MOVE.B    18(A6),D0
  492.     ASL    #3,D0
  493.     MOVE    D0,D1
  494.     ASL    #3,D0
  495.     ADD    D1,D0
  496.     LEA    mt_PeriodTable(PC),A0
  497.     ADD.L    D0,A0
  498.     MOVEQ    #0,D0
  499. mt_GlissLoop
  500.     CMP.W    (A0,D0.W),D2
  501.     BHS.S    mt_GlissFound
  502.     ADDQ    #2,D0
  503.     CMP.W    #36*2,D0
  504.     BLO.S    mt_GlissLoop
  505.     MOVEQ    #35*2,D0
  506. mt_GlissFound
  507.     MOVE.W    (A0,D0.W),D2
  508. mt_GlissSkip
  509.     MOVE.W    D2,6(A5) ; Set period
  510.     RTS
  511.  
  512. mt_Vibrato
  513.     MOVE.B    3(A6),D0
  514.     BEQ.S    mt_Vibrato2
  515.     MOVE.B    26(A6),D2
  516.     AND.B    #$0F,D0
  517.     BEQ.S    mt_vibskip
  518.     AND.B    #$F0,D2
  519.     OR.B    D0,D2
  520. mt_vibskip
  521.     MOVE.B    3(A6),D0
  522.     AND.B    #$F0,D0
  523.     BEQ.S    mt_vibskip2
  524.     AND.B    #$0F,D2
  525.     OR.B    D0,D2
  526. mt_vibskip2
  527.     MOVE.B    D2,26(A6)
  528. mt_Vibrato2
  529.     MOVE.B    27(A6),D0
  530.     LEA    mt_VibratoTable(PC),A4
  531.     LSR.W    #2,D0
  532.     AND.W    #$001F,D0
  533.     MOVE.B    30(A6),D2
  534.     AND.W    #$03,D2
  535.     BEQ.S    mt_vib_sine
  536.     LSL.B    #3,D0
  537.     CMP.B    #1,D2
  538.     BEQ.S    mt_vib_rampdown
  539.     MOVE.B    #255,D2
  540.     BRA.S    mt_vib_set
  541. mt_vib_rampdown
  542.     TST.B    27(A6)
  543.     BPL.S    mt_vib_rampdown2
  544.     MOVE.B    #255,D2
  545.     SUB.B    D0,D2
  546.     BRA.S    mt_vib_set
  547. mt_vib_rampdown2
  548.     MOVE.B    D0,D2
  549.     BRA.S    mt_vib_set
  550. mt_vib_sine
  551.     MOVE.B    0(A4,D0.W),D2
  552. mt_vib_set
  553.     MOVE.B    26(A6),D0
  554.     AND.W    #15,D0
  555.     MULU    D0,D2
  556.     LSR.W    #7,D2
  557.     MOVE.W    16(A6),D0
  558.     TST.B    27(A6)
  559.     BMI.S    mt_VibratoNeg
  560.     ADD.W    D2,D0
  561.     BRA.S    mt_Vibrato3
  562. mt_VibratoNeg
  563.     SUB.W    D2,D0
  564. mt_Vibrato3
  565.     MOVE.W    D0,6(A5)
  566.     MOVE.B    26(A6),D0
  567.     LSR.W    #2,D0
  568.     AND.W    #$003C,D0
  569.     ADD.B    D0,27(A6)
  570.     RTS
  571.  
  572. mt_TonePlusVolSlide
  573.     BSR.W    mt_TonePortNoChange
  574.     BRA.W    mt_VolumeSlide
  575.  
  576. mt_VibratoPlusVolSlide
  577.     BSR.S    mt_Vibrato2
  578.     BRA.W    mt_VolumeSlide
  579.  
  580. mt_Tremolo
  581.     MOVE.B    3(A6),D0
  582.     BEQ.S    mt_Tremolo2
  583.     MOVE.B    28(A6),D2
  584.     AND.B    #$0F,D0
  585.     BEQ.S    mt_treskip
  586.     AND.B    #$F0,D2
  587.     OR.B    D0,D2
  588. mt_treskip
  589.     MOVE.B    3(A6),D0
  590.     AND.B    #$F0,D0
  591.     BEQ.S    mt_treskip2
  592.     AND.B    #$0F,D2
  593.     OR.B    D0,D2
  594. mt_treskip2
  595.     MOVE.B    D2,28(A6)
  596. mt_Tremolo2
  597.     MOVE.B    29(A6),D0
  598.     LEA    mt_VibratoTable(PC),A4
  599.     LSR.W    #2,D0
  600.     AND.W    #$001F,D0
  601.     MOVEQ    #0,D2
  602.     MOVE.B    30(A6),D2
  603.     LSR.B    #4,D2
  604.     AND.B    #$03,D2
  605.     BEQ.S    mt_tre_sine
  606.     LSL.B    #3,D0
  607.     CMP.B    #1,D2
  608.     BEQ.S    mt_tre_rampdown
  609.     MOVE.B    #255,D2
  610.     BRA.S    mt_tre_set
  611. mt_tre_rampdown
  612.     TST.B    27(A6)
  613.     BPL.S    mt_tre_rampdown2
  614.     MOVE.B    #255,D2
  615.     SUB.B    D0,D2
  616.     BRA.S    mt_tre_set
  617. mt_tre_rampdown2
  618.     MOVE.B    D0,D2
  619.     BRA.S    mt_tre_set
  620. mt_tre_sine
  621.     MOVE.B    0(A4,D0.W),D2
  622. mt_tre_set
  623.     MOVE.B    28(A6),D0
  624.     AND.W    #15,D0
  625.     MULU    D0,D2
  626.     LSR.W    #6,D2
  627.     MOVEQ    #0,D0
  628.     MOVE.B    19(A6),D0
  629.     TST.B    29(A6)
  630.     BMI.S    mt_TremoloNeg
  631.     ADD.W    D2,D0
  632.     BRA.S    mt_Tremolo3
  633. mt_TremoloNeg
  634.     SUB.W    D2,D0
  635. mt_Tremolo3
  636.     BPL.S    mt_TremoloSkip
  637.     CLR.W    D0
  638. mt_TremoloSkip
  639.     CMP.W    #$40,D0
  640.     BLS.S    mt_TremoloOk
  641.     MOVE.W    #$40,D0
  642. mt_TremoloOk
  643.     MOVE.W    D0,8(A5)
  644.     MOVE.B    28(A6),D0
  645.     LSR.W    #2,D0
  646.     AND.W    #$003C,D0
  647.     ADD.B    D0,29(A6)
  648.     RTS
  649.  
  650. mt_SampleOffset
  651.     MOVEQ    #0,D0
  652.     MOVE.B    3(A6),D0
  653.     BEQ.S    mt_sononew
  654.     MOVE.B    D0,32(A6)
  655. mt_sononew
  656.     MOVE.B    32(A6),D0
  657.     LSL.W    #7,D0
  658.     CMP.W    8(A6),D0
  659.     BGE.S    mt_sofskip
  660.     SUB.W    D0,8(A6)
  661.     ADD.W    D0,D0
  662.     ADD.L    D0,4(A6)
  663.     RTS
  664. mt_sofskip
  665.     MOVE.W    #$0001,8(A6)
  666.     RTS
  667.  
  668. mt_VolumeSlide
  669.     MOVEQ    #0,D0
  670.     MOVE.B    3(A6),D0
  671.     LSR.B    #4,D0
  672.     TST.B    D0
  673.     BEQ.S    mt_VolSlideDown
  674. mt_VolSlideUp
  675.     ADD.B    D0,19(A6)
  676.     CMP.B    #$40,19(A6)
  677.     BMI.S    mt_vsuskip
  678.     MOVE.B    #$40,19(A6)
  679. mt_vsuskip
  680.     MOVE.B    19(A6),9(A5)
  681.     RTS
  682.  
  683. mt_VolSlideDown
  684.     MOVE.B    3(A6),D0
  685.     AND.W    #$0F,D0
  686. mt_VolSlideDown2
  687.     SUB.B    D0,19(A6)
  688.     BPL.S    mt_vsdskip
  689.     CLR.B    19(A6)
  690. mt_vsdskip
  691.     MOVE.B    19(A6),9(A5)
  692.     RTS
  693.  
  694. mt_PositionJump
  695.     MOVE.B    3(A6),D0
  696.     SUBQ    #1,D0
  697.     MOVE.B    D0,mt_SongPos
  698. mt_pj2    CLR.B    mt_PBreakPos
  699.     ST     mt_PosJumpFlag
  700.     RTS
  701.  
  702. mt_VolumeChange
  703.     MOVE.B    3(A6),D0
  704.     CMP.B    #$40,D0
  705.     BLS.S    mt_VolumeOk
  706.     MOVEQ    #$40,D0
  707. mt_VolumeOk
  708.     MOVE.B    D0,19(A6)
  709.     MOVE.B    D0,9(A5)
  710.     RTS
  711.  
  712. mt_PatternBreak
  713.     MOVEQ    #0,D0
  714.     MOVE.B    3(A6),D0
  715.     MOVE.W    D0,D2
  716.     LSR.B    #4,D0
  717.     ADD    D0,D0
  718.     MOVE    D0,D1
  719.     ADD    D0,D0
  720.     ADD    D0,D0
  721.     ADD    D1,D0
  722.     AND.B    #$0F,D2
  723.     ADD.B    D2,D0
  724.     CMP.B    #63,D0
  725.     BHI.S    mt_pj2
  726.     MOVE.B    D0,mt_PBreakPos
  727.     ST    mt_PosJumpFlag
  728.     RTS
  729.  
  730. mt_SetSpeed
  731.     MOVE.B    3(A6),D0
  732.     BEQ.W    mt_Return2
  733.     CLR.B    mt_counter
  734.     MOVE.B    D0,mt_speed
  735.     RTS
  736.  
  737. mt_CheckMoreEfx
  738.     BSR.W    mt_UpdateFunk
  739.     MOVE.B    2(A6),D0
  740.     AND.B    #$0F,D0
  741.     SUB.B    #9,D0
  742.     BEQ.W    mt_SampleOffset
  743.     SUBQ    #2,D0
  744.     BEQ.W    mt_PositionJump
  745.     SUBQ    #1,D0
  746.     BEQ.B    mt_VolumeChange
  747.     SUBQ    #1,D0
  748.     BEQ.S    mt_PatternBreak
  749.     SUBQ    #1,D0
  750.     BEQ.S    mt_E_Commands
  751.     SUBQ    #1,D0
  752.     BEQ.S    mt_SetSpeed
  753.     BRA.W    mt_PerNop
  754.  
  755. mt_E_Commands
  756.     MOVE.B    3(A6),D0
  757.     AND.W    #$F0,D0
  758.     LSR.B    #4,D0
  759.     BEQ.S    mt_FilterOnOff
  760.     SUBQ    #1,D0
  761.     BEQ.W    mt_FinePortaUp
  762.     SUBQ    #1,D0
  763.     BEQ.W    mt_FinePortaDown
  764.     SUBQ    #1,D0
  765.     BEQ.S    mt_SetGlissControl
  766.     SUBQ    #1,D0
  767.     BEQ.B    mt_SetVibratoControl
  768.     SUBQ    #1,D0
  769.     BEQ.B    mt_SetFineTune
  770.     SUBQ    #1,D0
  771.     BEQ.B    mt_JumpLoop
  772.     SUBQ    #1,D0
  773.     BEQ.W    mt_SetTremoloControl
  774.     SUBQ    #2,D0
  775.     BEQ.W    mt_RetrigNote
  776.     SUBQ    #1,D0
  777.     BEQ.W    mt_VolumeFineUp
  778.     SUBQ    #1,D0
  779.     BEQ.W    mt_VolumeFineDown
  780.     SUBQ    #1,D0
  781.     BEQ.W    mt_NoteCut
  782.     SUBQ    #1,D0
  783.     BEQ.W    mt_NoteDelay
  784.     SUBQ    #1,D0
  785.     BEQ.W    mt_PatternDelay
  786.     BRA.W    mt_FunkIt
  787.  
  788. mt_FilterOnOff
  789.     MOVE.B    3(A6),D0
  790.     AND.B    #1,D0
  791.     ADD.B    D0,D0
  792.     AND.B    #$FD,$BFE001
  793.     OR.B    D0,$BFE001
  794.     RTS    
  795.  
  796. mt_SetGlissControl
  797.     MOVE.B    3(A6),D0
  798.     AND.B    #$0F,D0
  799.     AND.B    #$F0,31(A6)
  800.     OR.B    D0,31(A6)
  801.     RTS
  802.  
  803. mt_SetVibratoControl
  804.     MOVE.B    3(A6),D0
  805.     AND.B    #$0F,D0
  806.     AND.B    #$F0,30(A6)
  807.     OR.B    D0,30(A6)
  808.     RTS
  809.  
  810. mt_SetFineTune
  811.     MOVE.B    3(A6),D0
  812.     AND.B    #$0F,D0
  813.     MOVE.B    D0,18(A6)
  814.     RTS
  815.  
  816. mt_JumpLoop
  817.     TST.B    mt_counter
  818.     BNE.W    mt_Return2
  819.     MOVE.B    3(A6),D0
  820.     AND.B    #$0F,D0
  821.     BEQ.S    mt_SetLoop
  822.     TST.B    34(A6)
  823.     BEQ.S    mt_jumpcnt
  824.     SUBQ.B    #1,34(A6)
  825.     BEQ.W    mt_Return2
  826. mt_jmploop     MOVE.B    33(A6),mt_PBreakPos
  827.     ST    mt_PBreakFlag
  828.     RTS
  829.  
  830. mt_jumpcnt
  831.     MOVE.B    D0,34(A6)
  832.     BRA.S    mt_jmploop
  833.  
  834. mt_SetLoop
  835.     MOVE.W    mt_PatternPos(PC),D0
  836.     LSR    #2,D0
  837.     MOVE.B    D0,33(A6)
  838.     RTS
  839.  
  840. mt_SetTremoloControl
  841.     MOVE.B    3(A6),D0
  842.     AND.B    #$0F,D0
  843.     LSL.B    #4,D0
  844.     AND.B    #$0F,30(A6)
  845.     OR.B    D0,30(A6)
  846.     RTS
  847.  
  848. mt_RetrigNote
  849.     MOVE.L    D1,-(SP)
  850.     MOVE.B    3(A6),D0
  851.     AND.W    #$0F,D0
  852.     BEQ.S    mt_rtnend
  853.     MOVEQ    #0,d1
  854.     MOVE.B    mt_counter(PC),D1
  855.     BNE.S    mt_rtnskp
  856.     MOVE.W    (A6),D1
  857.     AND.W    #$0FFF,D1
  858.     BNE.S    mt_rtnend
  859.     MOVEQ    #0,D1
  860.     MOVE.B    mt_counter(PC),D1
  861. mt_rtnskp
  862.     DIVU    D0,D1
  863.     SWAP    D1
  864.     TST.W    D1
  865.     BNE.S    mt_rtnend
  866. mt_DoRetrig
  867.     MOVE.W    20(A6),$DFF096    ; Channel DMA off
  868.     MOVE.L    4(A6),(A5)    ; Set sampledata pointer
  869.     MOVE.W    8(A6),4(A5)    ; Set length
  870.     BSR.W    mt_WaitDMA
  871.     MOVE.W    20(A6),D0
  872.     BSET    #15,D0
  873.     MOVE.W    D0,$DFF096
  874.     BSR.W    mt_WaitDMA
  875.     MOVE.L    10(A6),(A5)
  876.     MOVE.L    14(A6),4(A5)
  877. mt_rtnend
  878.     MOVE.L    (SP)+,D1
  879.     RTS
  880.  
  881. mt_VolumeFineUp
  882.     TST.B    mt_counter
  883.     BNE.W    mt_Return2
  884.     MOVE.B    3(A6),D0
  885.     AND.W    #$F,D0
  886.     BRA.W    mt_VolSlideUp
  887.  
  888. mt_VolumeFineDown
  889.     TST.B    mt_counter
  890.     BNE.W    mt_Return2
  891.     MOVE.B    3(A6),D0
  892.     AND.W    #$0F,D0
  893.     BRA.W    mt_VolSlideDown2
  894.  
  895. mt_NoteCut
  896.     MOVE.B    3(A6),D0
  897.     AND.W    #$0F,D0
  898.     CMP.B    mt_counter(PC),D0
  899.     BNE.W    mt_Return2
  900.     CLR.B    19(A6)
  901.     CLR.W    8(A5)
  902.     RTS
  903.  
  904. mt_NoteDelay
  905.     MOVE.B    3(A6),D0
  906.     AND.W    #$0F,D0
  907.     CMP.B    mt_Counter(PC),D0
  908.     BNE.W    mt_Return2
  909.     MOVE.W    (A6),D0
  910.     BEQ.W    mt_Return2
  911.     MOVE.L    D1,-(SP)
  912.     BRA.W    mt_DoRetrig
  913.  
  914. mt_PatternDelay
  915.     TST.B    mt_counter
  916.     BNE.W    mt_Return2
  917.     MOVE.B    3(A6),D0
  918.     AND.W    #$0F,D0
  919.     TST.B    mt_PattDelTime2
  920.     BNE.W    mt_Return2
  921.     ADDQ.B    #1,D0
  922.     MOVE.B    D0,mt_PattDelTime
  923.     RTS
  924.  
  925. mt_FunkIt
  926.     TST.B    mt_counter
  927.     BNE.W    mt_Return2
  928.     MOVE.B    3(A6),D0
  929.     AND.B    #$0F,D0
  930.     LSL.B    #4,D0
  931.     AND.B    #$0F,31(A6)
  932.     OR.B    D0,31(A6)
  933.     TST.B    D0
  934.     BEQ.W    mt_Return2
  935. mt_UpdateFunk
  936.     MOVEM.L    D1/A0,-(SP)
  937.     MOVEQ    #0,D0
  938.     MOVE.B    31(A6),D0
  939.     LSR.B    #4,D0
  940.     BEQ.S    mt_funkend
  941.     LEA    mt_FunkTable(PC),A0
  942.     MOVE.B    (A0,D0.W),D0
  943.     ADD.B    D0,35(A6)
  944.     BTST    #7,35(A6)
  945.     BEQ.S    mt_funkend
  946.     CLR.B    35(A6)
  947.  
  948.     MOVE.L    10(A6),D0
  949.     MOVEQ    #0,D1
  950.     MOVE.W    14(A6),D1
  951.     ADD.L    D1,D0
  952.     ADD.L    D1,D0
  953.     MOVE.L    36(A6),A0
  954.     ADDQ.L    #1,A0
  955.     CMP.L    D0,A0
  956.     BLO.S    mt_funkok
  957.     MOVE.L    10(A6),A0
  958. mt_funkok
  959.     MOVE.L    A0,36(A6)
  960.     NEG.B    (A0)
  961.     SUBQ.B    #1,(A0)
  962. mt_funkend
  963.     MOVEM.L    (SP)+,D1/A0
  964.     RTS
  965.  
  966. mt_WaitDMA
  967.     MOVEQ    #3,D0
  968. mt_WaitDMA2
  969.     MOVE.B    $DFF006,D1
  970. mt_WaitDMA3
  971.     CMP.B    $DFF006,D1
  972.     BEQ.S    mt_WaitDMA3
  973.     DBF    D0,mt_WaitDMA2
  974.     RTS
  975.  
  976. mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  977.  
  978. mt_VibratoTable    
  979.     dc.b   0, 24, 49, 74, 97,120,141,161
  980.     dc.b 180,197,212,224,235,244,250,253
  981.     dc.b 255,253,250,244,235,224,212,197
  982.     dc.b 180,161,141,120, 97, 74, 49, 24
  983.  
  984. mt_PeriodTable
  985. ; Tuning 0, Normal
  986.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  987.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  988.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  989. ; Tuning 1
  990.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  991.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  992.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  993. ; Tuning 2
  994.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  995.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  996.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  997. ; Tuning 3
  998.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  999.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1000.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1001. ; Tuning 4
  1002.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1003.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1004.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1005. ; Tuning 5
  1006.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1007.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1008.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1009. ; Tuning 6
  1010.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1011.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1012.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1013. ; Tuning 7
  1014.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1015.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1016.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1017. ; Tuning -8
  1018.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1019.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1020.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1021. ; Tuning -7
  1022.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1023.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1024.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1025. ; Tuning -6
  1026.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1027.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1028.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1029. ; Tuning -5
  1030.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1031.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1032.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1033. ; Tuning -4
  1034.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1035.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1036.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1037. ; Tuning -3
  1038.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1039.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1040.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1041. ; Tuning -2
  1042.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1043.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1044.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1045. ; Tuning -1
  1046.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1047.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1048.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1049.  
  1050. mt_chan1temp    blk.l    5
  1051.         dc.w    1
  1052.         blk.w    21
  1053.         dc.w    2
  1054.         blk.w    21
  1055.         dc.w    4
  1056.         blk.w    21
  1057.         dc.w    8
  1058.         blk.w    11
  1059.  
  1060. mt_SampleStarts    blk.l    31,0
  1061.  
  1062. mt_SongDataPtr    dc.l 0
  1063. mt_oldirq    dc.l 0
  1064.  
  1065. mt_speed    dc.b 6
  1066. mt_counter    dc.b 0
  1067. mt_SongPos    dc.b 0
  1068. mt_PBreakPos    dc.b 0
  1069. mt_PosJumpFlag    dc.b 0
  1070. mt_PBreakFlag    dc.b 0
  1071. mt_LowMask    dc.b 0
  1072. mt_PattDelTime    dc.b 0
  1073. mt_PattDelTime2    dc.b 0,0
  1074. mt_PatternPos    dc.w 0
  1075. mt_DMACONtemp    dc.w 0
  1076. ;mt_data:
  1077.